home *** CD-ROM | disk | FTP | other *** search
/ HyperLib 1997 Winter - Disc 1 / HYPERLIB-1997-Winter-CD1.ISO.7z / HYPERLIB-1997-Winter-CD1.ISO / オンラインウェア / PRG / NGL2.0.1J(68k).sit / NGL2.0.1J(68k) / Snow Demo / Snow Demo.c < prev    next >
C/C++ Source or Header  |  1996-10-01  |  4KB  |  196 lines

  1. /*============================================================
  2.  
  3.                     Snow  デモプログラム
  4.                     
  5. ============================================================*/
  6.  
  7. #include        "N_Library.h"
  8.  
  9. void            Main_Process(void);
  10. void            Key_Process(void);
  11.  
  12. short            Data_Rsrc = 0;
  13. long                routine_step = 0;
  14. long                wait;
  15. short            S1_X[1024];
  16. short            S1_Y[1024];
  17. unsigned short        S1_D[1024];
  18. short            S1_MX[1024];
  19. short            S1_MY[1024];
  20. short            r = 0,rs=0;
  21. short            speed  = -4;
  22. Boolean            q = false;
  23. Boolean            kb=false;
  24. EventRecord        theEvent;
  25.  
  26. void main(void)
  27. {
  28.     WindowPtr    window;
  29.     short         i;
  30.  
  31.     ToolboxInit();
  32.     ColorCheck();
  33.     HideMenuBar();
  34.     HideCursor();
  35.     window = GetNewWindow (128,nil,(WindowPtr)-1L );
  36.     N_Window_Set(window,-(window->portBits.bounds.left),-(window->portBits.bounds.top),640,480);
  37.     SetPort((GrafPtr)window);
  38.     N_Sp_Make(640,480);
  39.     N_Cel_Make2(640,480);
  40.     Open_Resource_File(128,1,&Data_Rsrc);
  41. //    Set Kanban Sprites <Sprites & Cel> (Sprite 256)
  42.     Through_Col = 0xff;                                                //透明部分を黒に変更
  43.     N_Sprite_Set(200,256,216,88,0,1,1,0);                                //木の看板を登録 (Sp 256)
  44. //    Set Snow Sprites (Sprite 30-46)
  45.     N_Sprite_Set(404,30,32,32,0,1,1,2);                                //雪のパターンの登録 (Sp 30-46)
  46.     N_Sprite_Set(419,46,8,8,0,1,1,0);
  47.     Through_Col = 0x00;                                            //透明部分を白に変更
  48.     N_Pict_Draw(131,0,0,(GrafPtr)SP_off,true);                            //背景は、スプライトオフスクリーンに書いておく
  49.     Close_Resource_File(&Data_Rsrc);
  50.  
  51.     routine_step = 0;
  52.     for (i = 0;i!=1024;i++)
  53.     {
  54.         N_Cel_Kill(i);                                        //プレーンを初期化
  55.         S1_X[i] = GetRandom(0,640*32)-640*16;                //配列にランダムで雪の座標を入れておく
  56.         S1_Y[i] = GetRandom(0,480*32)-480*16;
  57.         S1_D[i] = GetRandom(1,255);                            //奥行き(大きいほど奥になる)
  58.         S1_MX[i] = GetRandom(0,30)-15;
  59.         S1_MY[i] = GetRandom(0,30)-15;
  60.     }
  61.  
  62.     N_Pict_Effect (131,0,0,3,0,0);
  63.     for (i=0;i!=32;i++)
  64.     {
  65.         Delay(1,&wait);
  66.         N_Pict_Effect (131,0,0,3,1,0);
  67.         N_Pict_Effect (131,0,0,3,1,0);
  68.         N_Pict_Effect (131,0,0,3,1,0);
  69.         N_Pict_Effect (131,0,0,3,1,0);
  70.         N_Pict_Effect (131,0,0,3,1,0);
  71.         N_Pict_Effect (131,0,0,3,1,0);
  72.         N_Pict_Effect (131,0,0,3,1,0);
  73.         N_Pict_Effect (131,0,0,3,1,0);
  74.     }
  75.     do
  76.     {
  77.         Main_Process();
  78.     }
  79.     while (q==false);
  80.     FlushEvents( everyEvent, 0 ); 
  81.     ShowMenuBar();
  82.     ShowCursor();
  83.     ColorRevert();
  84. }
  85.  
  86. void Main_Process(void)
  87. {
  88.     short            i,x,y,ii,p = 0,dist,bt;
  89.     long                wrk;
  90.     long                xx,yy;
  91.     unsigned long        dum;
  92.     char                key;
  93.     Boolean            emp;
  94.     Point                mp;
  95.  
  96.     Key_Process();
  97.     routine_step++;
  98.     
  99.     if (routine_step<64)
  100.     {
  101.         N_Cel_Put(1799,0x80000000+256,212,(short)(routine_step*4-92));
  102.     }
  103.     if (routine_step>=64 && routine_step<192)
  104.     {
  105.         N_Cel_Put(1799,0x80000000+256,212,164);
  106.     }        
  107.     if (routine_step>=192 && routine_step <300)
  108.     {
  109.         N_Cel_Put(1799,0x80000000+256,212,(short)164+((routine_step-192)*5));
  110.     }
  111.  
  112.     if (routine_step < 300) ii = routine_step;
  113.         else    ii = 300;
  114.  
  115.     for (i = 0;i!=ii;i++)
  116.     {
  117.         S1_X[i] += S1_MX[i]+GetRandom(0,10)-5;
  118.         if (S1_X[i]<-640*16)S1_X[i]=640*16;
  119.         if (S1_X[i]>640*16)S1_X[i]=-640*16;
  120.         S1_Y[i] += S1_MY[i]+GetRandom(0,10)-5;
  121.         if (S1_Y[i]<-640*16)S1_Y[i]=640*16;
  122.         if (S1_Y[i]>640*16)S1_Y[i]=-640*16;
  123.         x = S1_X[i];
  124.         y = S1_Y[i];
  125.         wrk = S1_D[i];
  126.         wrk = wrk / 16;
  127.         wrk = 16-wrk;
  128.         if (wrk>14) wrk = 15;
  129.         N_Cel_3D_Put(i,0x80000000+30+wrk,x,y,320,240,r,S1_D[i]);        //雪の表示
  130.         dist = S1_D[i] + speed;
  131.         if (dist <  0)                                                //雪が着地するパターンを書いて、新たに雪を作成
  132.         {
  133.             dist = 512+dist;
  134.             N_Cel_Get(i,&emp,&dum,&x,&y);
  135.             N_Sp_Put(0x80000000+46,x-4,y-4);                        //雪の着地パターンは背景に直接書いて重ねる
  136.             S1_X[i] = GetRandom(0,640*32)-640*16;                    //配列にランダムで雪の座標を入れておく
  137.             S1_Y[i] = GetRandom(0,480*32)-480*16;
  138.         }            
  139.  
  140.         if (dist > 255)                                                //雪が着地するパターンを書いて、新たに雪を作成
  141.         {
  142.             dist = dist -256;            
  143.             S1_X[i] = GetRandom(0,640*32)-640*16;                    //配列にランダムで雪の座標を入れておく
  144.             S1_Y[i] = GetRandom(0,480*32)-480*16;
  145.         }            
  146.         S1_D[i] = dist;
  147.     }
  148.     r=r+rs;
  149.     N_Cel_Loop2(0,0);                                                //セル表示のすべての処理をこれを呼ぶだけで完了する
  150.  
  151. }
  152.  
  153. void Key_Process(void)
  154. {
  155.     char        ky;
  156.     
  157.     ky = N_Key_Get();
  158.     if (kb == false)
  159.     {
  160.         if ((ky & 0x01) !=0)
  161.         {
  162.             speed++;
  163.             kb = true;
  164.         }    
  165.         if ((ky & 0x02) !=0)
  166.         {
  167.             rs--;
  168.             kb = true;
  169.         }
  170.         if ((ky & 0x04) !=0)
  171.         {
  172.             rs++;
  173.             kb = true;
  174.         }
  175.         if ((ky & 0x08) !=0)
  176.         {
  177.             speed--;
  178.             kb = true;
  179.         }
  180.  
  181.         if ((ky & 0x40) !=0)
  182.         {
  183.             N_Pict_Draw(131,0,0,(GrafPtr)SP_off,true);                    //背景を書き直す
  184.             kb = true;
  185.         }
  186.     }    
  187.  
  188.     if ((ky & 0x80) !=0)
  189.     {
  190.          q = true;
  191.     }
  192.     if (ky==0) kb = 0;
  193. }
  194.  
  195.  
  196.